import os
import shutil
import pandas as pd
from pathlib import Path

def copy_missing_files():
    # 原始图片目录
    input_dir = "原始图片"
    # 输出目录
    output_dir = "output_images"
    # 缺失文件存放目录
    missing_dir = "缺失文件"
    
    # 确保缺失文件目录存在
    if not os.path.exists(missing_dir):
        os.makedirs(missing_dir)
    
    # 获取所有原始图片文件名（不包含路径）
    original_files = set()
    for file in os.listdir(input_dir):
        if file.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):
            original_files.add(file)
    
    # 获取所有已处理图片文件名（不包含路径）
    processed_files = set()
    for root, dirs, files in os.walk(output_dir):
        for file in files:
            if file.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):
                processed_files.add(file)
    
    # 找出缺失的文件
    missing_files = original_files - processed_files
    
    # 复制缺失的文件
    copied_count = 0
    failed_files = []
    
    print(f"开始复制 {len(missing_files)} 个缺失文件...")
    
    for file in missing_files:
        src_path = os.path.join(input_dir, file)
        dst_path = os.path.join(missing_dir, file)
        try:
            shutil.copy2(src_path, dst_path)
            copied_count += 1
            if copied_count % 100 == 0:  # 每复制100个文件打印一次进度
                print(f"已复制 {copied_count} 个文件...")
        except Exception as e:
            print(f"复制文件 {file} 时出错: {str(e)}")
            failed_files.append(file)
    
    # 打印统计信息
    print("\n复制完成！")
    print(f"成功复制: {copied_count} 个文件")
    if failed_files:
        print(f"复制失败: {len(failed_files)} 个文件")
        # 将失败的文件保存到Excel
        df_failed = pd.DataFrame(failed_files, columns=['复制失败的文件名'])
        failed_excel = "copy_failed_files.xlsx"
        df_failed.to_excel(failed_excel, index=False)
        print(f"复制失败的文件列表已保存到: {failed_excel}")

if __name__ == "__main__":
    copy_missing_files() 